package models

import (
	"gorm.io/datatypes"
)

// Region 行政区划模型
type Region struct {
	BaseModel
	Adcode       string `gorm:"type:varchar(12);not null"`
	Name         string `gorm:"type:varchar(50);not null"`
	Center       string `gorm:"type:varchar(30);not null"`
	Level        string `gorm:"type:varchar(20);not null;index"`
	Citycode     string `gorm:"type:varchar(20);default:''"` // 允许空值
	ParentID     uint   `gorm:"index"`
	ParentAdcode string `gorm:"type:varchar(12)"` // 改为指针类型允许NULL
}

// 运费模板模型 - 存储运费模板基本信息
type ShippingTemplate struct {
	BaseModel
	Name        string  `gorm:"size:100;not null;comment:模板名称"`
	Type        uint8   `gorm:"default:1;comment:计费类型(1-件数 2-重量 3-体积)"`
	IsDefault   bool    `gorm:"default:false;comment:是否默认模板"`
	FreeType    uint8   `gorm:"default:1;comment:包邮类型(1-不包邮 2-满额包邮 3-满件包邮)"`
	FreeAmount  float64 `gorm:"type:decimal(10,2);default:0;comment:包邮金额条件(当FreeType=2时生效)"`
	FreeQty     uint    `gorm:"default:0;comment:包邮件数条件(当FreeType=3时生效)"`
	IsEnable    bool    `gorm:"default:true;comment:是否启用"`
	Description string  `gorm:"size:255;comment:模板描述"`
}

// 配送区域模型 - 定义不同地区的运费规则
type ShippingArea struct {
	BaseModel
	TemplateID  uint    `gorm:"not null;index;comment:所属模板ID"`
	RegionNames string  `gorm:"type:text;comment:地区名称(多个用逗号分隔)"`
	RegionCodes string  `gorm:"type:text;comment:地区编码(多个用逗号分隔)"`
	FirstNum    float64 `gorm:"type:decimal(10,2);default:1;comment:首件/重/体数量"`
	FirstPrice  float64 `gorm:"type:decimal(10,2);default:0;comment:首费金额"`
	AddNum      float64 `gorm:"type:decimal(10,2);default:1;comment:续件/重/体数量"`
	AddPrice    float64 `gorm:"type:decimal(10,2);default:0;comment:续费金额"`
}

// 特殊商品运费模型 - 为特定商品设置特殊运费规则
type TemplateItem struct {
	BaseModel
	TemplateID uint    `gorm:"not null;index;comment:所属模板ID"`
	ProductID  uint    `gorm:"not null;index;comment:商品ID"`
	FirstNum   float64 `gorm:"type:decimal(10,2);default:1;comment:首件/重/体数量"`
	FirstPrice float64 `gorm:"type:decimal(10,2);default:0;comment:首费金额"`
	AddNum     float64 `gorm:"type:decimal(10,2);default:1;comment:续件/重/体数量"`
	AddPrice   float64 `gorm:"type:decimal(10,2);default:0;comment:续费金额"`
}

// 运费规则快照模型 - 保存订单创建时的运费规则
type ShippingSnapshot struct {
	BaseModel
	OrderID      uint           `gorm:"not null;index;comment:关联订单ID"`
	TemplateID   uint           `gorm:"not null;index;comment:运费模板ID"`
	TemplateName string         `gorm:"size:100;not null;comment:模板名称"`
	Type         uint8          `gorm:"default:1;comment:计费类型(1-件数 2-重量 3-体积)"`
	TotalCost    float64        `gorm:"type:decimal(10,2);default:0;comment:计算的总运费"`
	Details      datatypes.JSON `gorm:"type:json;comment:运费计算详情(JSON格式)"`
}

// TableName 设置表名
func (Region) TableName() string {
	return "regions"
}
